﻿Imports Microsoft.VisualBasic
Imports System.Security.Cryptography
Imports System.IO
Imports System.Text

Public Class Form1

    Private FirewallState As Boolean

    ''' <summary>
    ''' Klasse zum Prüfen, Ein- und Ausschalten der Firewall
    ''' </summary>
    Public Class Firewall

        ''' <summary>
        ''' Prüfen ob das Betriebssystem unterstützt wird
        ''' </summary>
        Public Shared ReadOnly Property OS() As Boolean
            Get
                Return Firewall.IsWindowsXPOrHigher()
            End Get
        End Property

        ''' <summary>
        ''' Rückgabe des aktuellen Firewall Status
        ''' </summary>
        Public Shared ReadOnly Property ReturnFirewallState() As Boolean
            Get
                Return Firewall.IsFirewallEnabled()
            End Get
        End Property

        ''' <summary>
        ''' Rückgabe der Programm ID an die aufrufende Funktion
        ''' </summary>
        Private Shared ReadOnly Property ProgId() As String
            Get
                Return "HNetCfg.FwMgr"
            End Get
        End Property

        ''' <summary>
        ''' Prüfen ob die Firewall eingeschaltet ist oder nicht
        ''' </summary>
        ''' <returns>Status der Firewall</returns>
        Private Shared Function IsFirewallEnabled() As Boolean
            ' Variablen deklarieren...
            Dim hObject As Object
            Dim cp As Object
            Dim State As Boolean

            ' Fehlerüberwachung einschalten
            Try
                ' ... und initialisieren...
                hObject = CreateObject(ProgId)
                cp = hObject.LocalPolicy.CurrentProfile
                ' Rückgabe = True
                If cp.FirewallEnabled Then
                    State = True
                Else
                    ' ... sonst False
                    State = False
                End If
                ' Resourcen freigeben.
                cp = Nothing
                hObject = Nothing
                ' Status zurückgeben
                Return State
            Catch ex As Exception
                ' Wenn Fehler False zurückgeben
                Return False
            End Try
        End Function

        ''' <summary>
        ''' Schaltet die Firewall ein / aus
        ''' </summary>
        Public Shared Sub DisableOrEnableFirewall(ByVal Index As String)
            ' Fehlerüberwachung einschalten
            Try
                Select Case Index
                    Case "disable"
                        ' Firewall ausschalten
                        Dim CurrentProfile As Object = MakeObject()
                        CurrentProfile.FirewallEnabled = False
                    Case "enable"
                        ' Firewall einschalten
                        Dim CurrentProfile As Object = MakeObject()
                        CurrentProfile.FirewallEnabled = True
                    Case Else
                End Select
            Catch ex As Exception
                ' Eventuell auftretenden Fehler abfangen
                ' und Fehlermeldung ausgeben
                MessageBox.Show(ex.Message.ToString(), "Info")
            End Try
        End Sub

        ''' <summary>
        ''' Objektrückgabe
        ''' </summary>
        Private Shared Function MakeObject() As Object
            Dim hObject As Object = CreateObject(ProgId)
            Dim CurrentProfile As Object = hObject.LocalPolicy.CurrentProfile
            Return CurrentProfile
        End Function

        ''' <summary>
        ''' Prüft ob das verwendete Betriebssystem unterstützt wird
        ''' </summary>
        Private Shared Function IsWindowsXPOrHigher() As Boolean
            Dim OS As OperatingSystem = Environment.OSVersion
            Dim Result As Boolean = OS.Platform = PlatformID.Win32NT AndAlso _
               ((OS.Version.Major = 5 AndAlso _
               OS.Version.Minor >= 1) OrElse _
               OS.Version.Major > 5)
            If Result Then
                Return True
            Else
                Return False
            End If
        End Function
    End Class

    ''' <summary>
    ''' Meldung über den aktuellen Status der Firewall zurückgeben
    ''' </summary>
    Private Function Message(ByVal Index As Integer) As String
        Dim msg As String = ""
        Select Case Index
            Case 0
                msg = "Firewall ist eingeschaltet - Klicken zum ausschalten"
            Case 1
                msg = "Firewall ist ausgeschaltet - Klicken zum einschalten"
            Case 2
                msg = "Das Beispiel ist für Windows XP oder höher"
        End Select
        Return msg
    End Function

    Private Sub Button5_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button5.Click

        ' Prüfen ob das Betriebssystem unterstützt wird
        If Firewall.OS Then
            ' Aktuellen Status der Firewall abfragen - Eingeschaltet oder nicht
            Me.FirewallState = Firewall.ReturnFirewallState()
            Select Case Me.FirewallState
                Case True
                    ' Ist die Firewall eingeschaltet wird sie hier ausgeschaltet...
                    Firewall.DisableOrEnableFirewall("disable")
                Case Else
                    ' ... und hier wieder eingescahltet
                    Firewall.DisableOrEnableFirewall("enable")
            End Select
        Else
            ' Wird das OS nicht unterstützt dann wird eine Meldung ausgegeben
            MessageBox.Show(Message(2), "Info")
        End If

        ' Den aktuellen Status der Variable FirewallState verwenden um die 
        ' Button(-Beschriftungen) zu ändern.
        If Me.FirewallState = True Then
            Me.Button1.Text = Message(1)
        Else
            Me.Button1.Text = Message(0)
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load

        ' Prüfen ob das Betriebssystem unterstützt wird
        If Firewall.OS Then
            ' Aktuellen Status der Firewall abfragen - Eingeschaltet oder nicht
            Me.FirewallState = Firewall.ReturnFirewallState()
            ' Status als Button-Beschriftung ausgeben
            Select Case Me.FirewallState
                Case True
                    Me.Button1.Text = Message(0)
                Case Else
                    Me.Button1.Text = Message(1)
            End Select
        Else
            ' Wird das OS nicht unterstützt dann wird eine Meldung ausgegeben
            MessageBox.Show(Message(2), "Info")
            Me.Button1.Enabled = False
        End If
    End Sub


   


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Not TextBox1.Text = "" Then
            Label3.Text = GetMD5FromString(TextBox1.Text)
            Label5.Text = verschlüsseln(TextBox1.Text)
            Label12.Text = GetMD5Salted(TextBox1.Text)
        Else
            Label6.Text = "Das Passwort darf nicht leer sein!"
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Label10.Visible = False
        Label8.Text = TextBox2.Text
        Label7.Text = TextBox1.Text
        If Label8.Text = Label7.Text Then
            Label9.Text = "true"
        Else
            Label9.Text = "false"
        End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Label10.Visible = False
        Label8.Text = GetMD5FromString(TextBox1.Text)
        Label7.Text = GetMD5FromString(TextBox1.Text)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Label10.Visible = True
        Label7.Text = TextBox1.Text
        Label8.Text = Label5.Text
        Label10.Text = entschlüsseln(Label5.Text)
    End Sub

    Public Shared Function GetMD5FromString(ByVal sText As String) As String
        ' MD5-Hash eines Strings ermitteln
        ' Der String-Inhalt muss hierbei als Byte-Array 
        ' übergeben werden. Hierzu verweden wir einfach 
        ' System.Text.Encoding-Klasse
        Dim MD5 As New MD5CryptoServiceProvider
        MD5.ComputeHash(System.Text.Encoding.Default.GetBytes(sText))

        ' als Ergebnis erhalten wir wieder ein Byte-Array, 
        ' das mittels der BitConverter-Klasse zurück in 
        ' einen String konvertiert wird.
        Return BitConverter.ToString(MD5.Hash)
    End Function

    Public Shared Function GetMD5Salted(ByVal sText As String, Optional ByVal salt As Integer = 0) As String
        If salt = 0 Then
            Dim r As Random = New Random()
            salt = r.Next(1000, 9999)
        End If
        ' MD5-Hash eines Strings ermitteln
        ' Der String-Inhalt muss hierbei als Byte-Array 
        ' übergeben werden. Hierzu verweden wir einfach 
        ' System.Text.Encoding-Klasse
        Dim MD5 As New MD5CryptoServiceProvider
        MD5.ComputeHash(System.Text.Encoding.Default.GetBytes(sText & salt))
        Form1.Label14.Text = salt
        ' als Ergebnis erhalten wir wieder ein Byte-Array, 
        ' das mittels der BitConverter-Klasse zurück in 
        ' einen String konvertiert wird.
        Return BitConverter.ToString(MD5.Hash)
    End Function

    Public Shared Function verschlüsseln(ByVal input As String) As String
        Dim rd As New RijndaelManaged

        If input = Nothing Or input = "" Then
            Return "Keine  Eingabe getätigt"
            Exit Function
        End If

        Dim md5 As New MD5CryptoServiceProvider
        Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes("Verschlüsselungskey"))

        md5.Clear()
        rd.Key = key
        rd.GenerateIV()

        Dim iv() As Byte = rd.IV
        Dim ms As New MemoryStream

        ms.Write(iv, 0, iv.Length)

        Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
        Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(input)

        cs.Write(data, 0, data.Length)
        cs.FlushFinalBlock()

        Dim encdata() As Byte = ms.ToArray()
        Return Convert.ToBase64String(encdata)
        cs.Close()
        rd.Clear()

    End Function

    Public Shared Function entschlüsseln(ByVal input As String) As String


        If input = Nothing Or input = "" Then
            Return "Keine Eingabe getätigt"
            Exit Function
        End If
        Dim rd As New RijndaelManaged
        Dim rijndaelIvLength As Integer = 16
        Dim md5 As New MD5CryptoServiceProvider
        Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes("Verschlüsselungskey"))

        md5.Clear()

        Dim encdata() As Byte = Convert.FromBase64String(input)
        Dim ms As New MemoryStream(encdata)
        Dim iv(15) As Byte

        ms.Read(iv, 0, rijndaelIvLength)
        rd.IV = iv
        rd.Key = key

        Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)

        Dim data(ms.Length - rijndaelIvLength) As Byte
        Dim i As Integer = cs.Read(data, 0, data.Length)

        Return (System.Text.Encoding.UTF8.GetString(data, 0, i))

        cs.Close()
        rd.Clear()

    End Function

    Public Shared Function verschlüsseln2(ByVal input As String) As String
        Dim rd As New RijndaelManaged

        If input = Nothing Or input = "" Then
            Return "Keine  Eingabe getätigt"
            Exit Function
        End If

        Dim md5 As New MD5CryptoServiceProvider
        Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes("Verschlüsselungskey"))

        md5.Clear()
        rd.Key = key
        rd.GenerateIV()

        Dim iv() As Byte = rd.IV
        Dim ms As New MemoryStream

        ms.Write(iv, 0, iv.Length)

        Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
        Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(input)

        cs.Write(data, 0, data.Length)
        cs.FlushFinalBlock()

        Dim encdata() As Byte = ms.ToArray()
        Return Convert.ToBase64String(encdata)
        cs.Close()
        rd.Clear()

    End Function

    Public Shared Function entschlüsseln2(ByVal input As String) As String


        If input = Nothing Or input = "" Then
            Return "Keine Eingabe getätigt"
            Exit Function
        End If
        Dim rd As New RijndaelManaged
        Dim rijndaelIvLength As Integer = 16
        Dim md5 As New MD5CryptoServiceProvider
        Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes("Verschlüsselungskey"))

        md5.Clear()

        Dim encdata() As Byte = Convert.FromBase64String(input)
        Dim ms As New MemoryStream(encdata)
        Dim iv(15) As Byte

        ms.Read(iv, 0, rijndaelIvLength)
        rd.IV = iv
        rd.Key = key

        Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)

        Dim data(ms.Length - rijndaelIvLength) As Byte
        Dim i As Integer = cs.Read(data, 0, data.Length)

        Return (System.Text.Encoding.UTF8.GetString(data, 0, i))

        cs.Close()
        rd.Clear()

    End Function

End Class

Public Class Passwort

    
End Class

